package area

import (
	"context"
	"github.com/google/uuid"
	"github.com/zeromicro/go-zero/core/logx"
	"insighttracking/apps/admin/internal/svc"
	"insighttracking/apps/admin/internal/types"
	"insighttracking/query/dao"
	"net/http"
	"os"
)

type GetAreaTreeApiLogic struct {
	logx.Logger
	ctx     context.Context
	svcCtx  *svc.ServiceContext
	Request *http.Request
}

func NewGetAreaTreeApiLogic(ctx context.Context, svcCtx *svc.ServiceContext, request *http.Request) *GetAreaTreeApiLogic {
	hostname, _ := os.Hostname()
	return &GetAreaTreeApiLogic{
		Logger: logx.WithContext(ctx).WithCallerSkip(0).WithFields(
			logx.Field("Log_UUID", uuid.New().String()),
			logx.Field("hostname", hostname)),
		ctx:     ctx,
		svcCtx:  svcCtx,
		Request: request,
	}
}

func (l *GetAreaTreeApiLogic) GetAreaTreeApi() (resp []types.AreaResp, err error) {
	//const REDIS_AREA_KEY = "redis_area_key"
	//result, _ := l.svcCtx.RedisDb.Get(l.ctx, REDIS_AREA_KEY).Result()
	//if result != "" {
	//	if err = json.Unmarshal([]byte(result), &resp); err == nil {
	//		return resp, nil
	//	}
	//}
	//areaList, _ := dao.AreaEntity.WithContext(l.ctx).Find()
	//// 找到省份
	//provinceList := k.Filter(areaList, func(item *model.AreaEntity, index int) bool {
	//	return item.Pid == 0
	//})
	////  省份id
	//provinceIdList := k.Map(provinceList, func(item *model.AreaEntity, index int) int64 {
	//	return item.ID
	//})
	//// 找到市
	//cityList := k.Filter(areaList, func(item *model.AreaEntity, index int) bool {
	//	return k.IsContains(provinceIdList, item.Pid)
	//})
	//cityIdList := k.Map(cityList, func(item *model.AreaEntity, index int) int64 {
	//	return item.ID
	//})
	//// 找到县
	//countyList := k.Filter(areaList, func(item *model.AreaEntity, index int) bool {
	//	return k.IsContains(cityIdList, item.Pid)
	//})
	//
	//countyPidMap := k.GroupBy(k.Map(countyList, func(item *model.AreaEntity, index int) types.AreaResp {
	//	return types.AreaResp{
	//		ID:         item.ID,                   // 主键id
	//		Pid:        item.Pid,                  // 父节点id
	//		Name:       item.Name,                 // 名称
	//		MergerName: item.MergerName,           // 全称
	//		Level:      item.Level,                // 级别
	//		ZipCode:    item.ZipCode,              // 邮编
	//		Lng:        item.Lng,                  // 经度
	//		Lat:        item.Lat,                  // 维度
	//		Children:   make([]types.AreaResp, 0), // 子节点
	//	}
	//}), func(item types.AreaResp) int64 {
	//	return item.Pid
	//})
	//// 市区map
	//cityPidMap := k.GroupBy(k.Map(cityList, func(item *model.AreaEntity, index int) types.AreaResp {
	//	return types.AreaResp{
	//		ID:         item.ID,                                                                              // 主键id
	//		Pid:        item.Pid,                                                                             // 父节点id
	//		Name:       item.Name,                                                                            // 名称
	//		MergerName: item.MergerName,                                                                      // 全称
	//		Level:      item.Level,                                                                           // 级别
	//		ZipCode:    item.ZipCode,                                                                         // 邮编
	//		Lng:        item.Lng,                                                                             // 经度
	//		Lat:        item.Lat,                                                                             // 维度
	//		Children:   k.If(countyPidMap[item.ID] == nil, make([]types.AreaResp, 0), countyPidMap[item.ID]), // 子节点
	//	}
	//}), func(item types.AreaResp) int64 {
	//	return item.Pid
	//})
	//// 省份的返回
	//resps := k.Map(provinceList, func(item *model.AreaEntity, index int) types.AreaResp {
	//	return types.AreaResp{
	//		ID:         item.ID,                                                                          // 主键id
	//		Pid:        item.Pid,                                                                         // 父节点id
	//		Name:       item.Name,                                                                        // 名称
	//		MergerName: item.MergerName,                                                                  // 全称
	//		Level:      item.Level,                                                                       // 级别
	//		ZipCode:    item.ZipCode,                                                                     // 邮编
	//		Lng:        item.Lng,                                                                         // 经度
	//		Lat:        item.Lat,                                                                         // 维度
	//		Children:   k.If(cityPidMap[item.ID] == nil, make([]types.AreaResp, 0), cityPidMap[item.ID]), // 子节点
	//	}
	//})
	//isOk, err := l.svcCtx.RedisDb.Set(l.ctx, REDIS_AREA_KEY, k.MapToString(resps), 365*24*time.Hour).Result()
	//fmt.Println(isOk, "---->>", err)
	//return resps, nil
	return nil, err
}

func (l *GetAreaTreeApiLogic) GetAreaNameApi(code string) (name string, err error) {
	areaEntity, err := dao.AreaEntity.WithContext(l.ctx).Where(dao.AreaEntity.Code.Eq(code)).First()
	if err != nil {
		return "", err
	}
	return areaEntity.Address, nil
}
